#include <iostream>
#include <vector>
#include <string>

using namespace std;

// 深度优先搜索函数，用于标记由 '.' 组成的连通区域
void dfs(vector<string> &image, int i, int j, vector<vector<bool>> &visited) {
    int rows = image.size();
    int cols = image[0].size();
    // 检查坐标是否越界、是否为 '#' 或已访问
    if (i < 0 || i >= rows || j < 0 || j >= cols || image[i][j] == '#' || visited[i][j]) {
        return;
    }
    // 标记当前像素为已访问
    visited[i][j] = true;
    // 向四个方向进行深度优先搜索
    dfs(image, i + 1, j, visited);
    dfs(image, i - 1, j, visited);
    dfs(image, i, j + 1, visited);
    dfs(image, i, j - 1, visited);
}

// 判断字母的函数
char identify_letter(vector<string> &original_image) {
    int n = original_image.size();
    int m = original_image[0].size();
    // 创建添加一圈 '.' 后的新图像
    vector<string> image(n + 2);
    image[0] = string(m + 2, '.');
    for (int i = 0; i < n; ++i) {
        image[i + 1] = '.' + original_image[i] + '.';
    }
    image[n + 1] = string(m + 2, '.');

    int rows = image.size();
    int cols = image[0].size();
    vector<vector<bool>> visited(rows, vector<bool>(cols, false));
    int connected_components = 0;

    // 遍历图像中的每个像素
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            if (image[i][j] == '.' && !visited[i][j]) {
                // 发现一个新的由 '.' 组成的连通区域，进行深度优先搜索
                dfs(image, i, j, visited);
                connected_components++;
            }
        }
    }

    // 根据由 '.' 组成的连通区域数量判断字母
    if (connected_components >= 2) {
        return 'A';
    }
    return 'H';
}

int main() {
    int T;
    cin >> T;

    for (int t = 1; t <= T; ++t) {
        int n, m;
        cin >> n >> m;
        vector<string> original_image(n);
        // 读取图像的每一行
        for (int i = 0; i < n; ++i) {
            cin >> original_image[i];
        }
        // 调用函数判断字母
        char result = identify_letter(original_image);
        cout << "Case " << t << ": " << result << endl;
    }

    return 0;
}